/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import accesoDatos.Consultas;
import accesoDatos.ParametrosConsulta;
import com.sgd.videoclub.AlquilerPelicula;
import com.sgd.videoclub.Socio;
import com.sgd.videoclub.Videoclub;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import utils.FacesUtils;
import utils.FuncionesGenericas;

/**
 *
 * @author Daniel
 */
@ManagedBean
@SessionScoped
public class CtrSession {

    FuncionesGenericas fg = new FuncionesGenericas();
    Consultas consultas = new Consultas();

    String usuario = "danyche";
    String password = "larrymoe";

    List<Object> parametro = new ArrayList<Object>();

    //Datos para Reporte 
    Object reporteData = new Object();
    Map parametrosReporte = new HashMap();

    //Parametros Usados en el sistemas:
    String logo = FacesUtils.getExternalContext().getRealPath("/img/logosmall.png");

    private Set<AlquilerPelicula> alquilerPeliculas = new HashSet<AlquilerPelicula>(0);
    private Set<Socio> listSocios = new HashSet<Socio>(0);

    private double totalAlquiler;
    private String txtbuscar;
    boolean verBuscador = false;
    Socio selSocio = new Socio();

    Videoclub selVideoCLub = new Videoclub();
    String nombreVideoClub = "";

    public CtrSession() {

    }

    public void seleccionaMenu(String opcion) throws IOException {
        fg.redireccionar(opcion);
    }

    public String login() {

        List<ParametrosConsulta> lisPar = new ArrayList();
        lisPar.add(new ParametrosConsulta("usuario", usuario));
        lisPar.add(new ParametrosConsulta("password", password));

//        try {
//            usuarioLogueado = (Usuario) consultas.getOneHql(null, "Usuario", " ((upper(username)=upper(:usuario)) or (upper(email)=upper(:usuario)  )) and upper(password)=upper(:password) ", lisPar);
//
//            if (usuarioLogueado != null) {
//
//                //Saco la IpRemota
//                HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
//                String ipAddress = getIpAddr(request);
//
//                //Guardo Datos de Sesion:
//                SimpleDateFormat dateFormat = new SimpleDateFormat("yyy_MM_dd_HH_mm_ss");
//                Date date = new Date();
//                String fechaFormateada = dateFormat.format(date);
//                String idSesion = fechaFormateada + "_" + ipAddress;
//                SesionUsuario sesionUsuario = new SesionUsuario(idSesion);
//                sesionUsuario.setUsuarioId(usuarioLogueado.getId());
//                consultas.guardaroActualizar(sesionUsuario);
        return "/prot/entrada.xhtml";
//            } else {
//                fg.mostrarError("Usuario o password incorrecto.");
//                return "";
//            }
//
//        } catch (Exception e) {
//            fg.mostrarError("Usuario o password incorrecto.");
//            return "";
//        }
    }

    public String ingresar() {

        List listVC = consultas.getListHql(null, "Videoclub", " codigo=" + selVideoCLub.getCodigo() + " ", null);

        if (listVC != null) {
            selVideoCLub = (Videoclub) listVC.get(0);
            return "/prot/entrada.xhtml";
        } else {
            return "";
        }

    }

    public static String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("X-Real-IP");
        if (null != ip && !"".equals(ip.trim())
                && !"unknown".equalsIgnoreCase(ip)) {
            return ip;
        }
        ip = request.getHeader("X-Forwarded-For");
        if (null != ip && !"".equals(ip.trim())
                && !"unknown".equalsIgnoreCase(ip)) {
// get first ip from proxy ip
            int index = ip.indexOf(',');
            if (index != -1) {
                return ip.substring(0, index);
            } else {
                return ip;
            }
        }
        return request.getRemoteAddr();
    }

    public String resetearCamposLogin() {
        usuario = "";
        password = "";
        return "";
    }

    public void cerrarSession() {

        try {

            FacesContext faces = FacesContext.getCurrentInstance();
            ExternalContext context = faces.getExternalContext();
            final HttpServletRequest request = (HttpServletRequest) context.getRequest();
            request.getSession(false).invalidate();
            //context.redirect(url);
            fg.redireccionar("../pub/index");
            faces.responseComplete();
            Runtime r = Runtime.getRuntime();
            r.gc();
        } catch (Exception e) {
            //    System.out.println("Error en redirect");
        }

    }

    public Set<AlquilerPelicula> getAlquilerPeliculas() {
        return this.alquilerPeliculas;
    }

    public void setAlquilerPeliculas(Set<AlquilerPelicula> alquilerPeliculas) {
        this.alquilerPeliculas = alquilerPeliculas;
    }

    public List<AlquilerPelicula> getAlquilerPeliculasList() {
        return new ArrayList<>(this.alquilerPeliculas);
    }

    public Set<Socio> getListSocios() {
        return listSocios;
    }

    public void setListSocios(Set<Socio> listSocios) {
        this.listSocios = listSocios;
    }

    public List<Socio> getListSociosList() {
        return new ArrayList<>(this.listSocios);
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public List<Object> getParametro() {
        return parametro;
    }

    public void setParametro(List<Object> parametro) {
        this.parametro = parametro;
    }

    public String getLogo() {
        return logo;
    }

    public void setLogo(String logo) {
        this.logo = logo;
    }

    public Object getReporteData() {
        return reporteData;
    }

    public void setReporteData(Object reporteData) {
        this.reporteData = reporteData;
    }

    public Map getParametrosReporte() {
        return parametrosReporte;
    }

    public void setParametrosReporte(Map parametrosReporte) {
        this.parametrosReporte = parametrosReporte;
    }

    public double getTotalAlquiler() {
        return totalAlquiler;
    }

    public void setTotalAlquiler(double totalAlquiler) {
        this.totalAlquiler = totalAlquiler;
    }

    public String getTxtbuscar() {
        return txtbuscar;
    }

    public void setTxtbuscar(String txtbuscar) {
        this.txtbuscar = txtbuscar;
    }

    public boolean isVerBuscador() {
        return verBuscador;
    }

    public void setVerBuscador(boolean verBuscador) {
        this.verBuscador = verBuscador;
    }

    public Socio getSelSocio() {
        return selSocio;
    }

    public void setSelSocio(Socio selSocio) {
        this.selSocio = selSocio;
    }

    public Videoclub getSelVideoCLub() {
        return selVideoCLub;
    }

    public void setSelVideoCLub(Videoclub selVideoCLub) {
        this.selVideoCLub = selVideoCLub;
    }

    public String getNombreVideoClub() {
        return nombreVideoClub;
    }

    public void setNombreVideoClub(String nombreVideoClub) {
        this.nombreVideoClub = nombreVideoClub;
    }

}
